/*
 * Tencent is pleased to support the open source community by making BK-JOB蓝鲸智云作业平台 available.
 *
 * Copyright (C) 2021 THL A29 Limited, a Tencent company.  All rights reserved.
 *
 * BK-JOB蓝鲸智云作业平台 is licensed under the MIT License.
 *
 * License for BK-JOB蓝鲸智云作业平台:
 *
 * ---------------------------------------------------
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
 * documentation files (the "Software"), to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
 * to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of
 * the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 * THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
*/

/**
 * @desc DOM 元素 offset
 * @param { DomElement } target
 * @returns { Object }
 */
export const getOffset = (target) => {
    let totalLeft = null;
    let totalTop = null;
    let par = target.offsetParent;
    totalLeft += target.offsetLeft;
    totalTop += target.offsetTop;
    while (par) {
        if (navigator.userAgent.indexOf('MSIE 8.0') === -1) {
            // 不是IE8我们才进行累加父级参照物的边框
            totalTop += par.clientTop;
            totalLeft += par.clientLeft;
        }
        totalTop += par.offsetTop;
        totalLeft += par.offsetLeft;
        par = par.offsetParent;
    }
    return { left: totalLeft, top: totalTop };
};

/**
 * @desc DOM 节点的 scrollParent
 * @param { DomElement } node
 * @returns { DomElement }
 */
export const getScrollParent = (node) => {
    if (node === null) {
        return null;
    }
   
    if (node.scrollHeight > node.clientHeight) {
        return node;
    }
    return getScrollParent(node.parentNode);
};

/**
 * @desc 滚动动画
 * @param { DomElement } target
 * @param { Number } destScrollTop
 */
export const scrollTopSmooth = function (target, destScrollTop) {
    if (!window.requestAnimationFrame) {
        window.requestAnimationFrame = function (cb) {
            return setTimeout(cb, 20);
        };
    }
    let { scrollTop } = target;
    const step = function () {
        const distance = destScrollTop - scrollTop;
        scrollTop = scrollTop + distance / 5;
        if (Math.abs(distance) < 1) {
            target.scrollTo(0, destScrollTop);
        } else {
            target.scrollTo(0, scrollTop);
            requestAnimationFrame(step);
        }
    };
    step();
};
